package com.btpj.hospital_server.service;

import com.btpj.hospital_server.dto.param.HospitalSpecialParam;
import com.btpj.hospital_server.entity.HospitalOutpatient;
import com.btpj.hospital_server.entity.HospitalSpecial;
import com.btpj.hospital_server.mapper.HospitalSpecialMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * 医院专科HospitalSpecialService
 *
 * @author BTPJ  2020/8/26
 */
@Service
public class HospitalSpecialService {

    @Resource
    HospitalSpecialMapper hospitalSpecialMapper;

    @Resource
    HospitalOutpatientService hospitalOutpatientService;

    /**
     * 是否存在指定ID的专科
     *
     * @param specialId 专科的编号
     * @return 是否存在指定ID的专科
     */
    public boolean existSpecial(Long specialId) {
        return hospitalSpecialMapper.selectByPrimaryKey(specialId) != null;
    }

    /**
     * 获取指定ID的专科的名称
     *
     * @param id 专科的编号
     * @return 专科的名称
     */
    public String getName(Long id) {
        HospitalSpecial hospitalSpecial = hospitalSpecialMapper.selectByPrimaryKey(id);
        return hospitalSpecial != null ? hospitalSpecial.getName() : null;
    }

    /**
     * 是否存在指定名称的专科
     *
     * @param name 专科的名称
     * @return 是否存在指定名称的专科
     */
    public boolean existSpecial(String name) {
        return hospitalSpecialMapper.selectByName(name) != null;
    }

    /**
     * 添加专科信息
     *
     * @param param HospitalSpecialParam
     * @return 是否添加成功
     */
    public boolean addSpecial(HospitalSpecialParam param) {
        HospitalSpecial hospitalSpecial = new HospitalSpecial();
        BeanUtils.copyProperties(param, hospitalSpecial);
        hospitalSpecial.setGmtCreate(new Date());
        hospitalSpecial.setGmtModified(new Date());
        return hospitalSpecialMapper.insertSelective(hospitalSpecial) > 0;
    }

    /**
     * 修改专科信息
     *
     * @param id    专科编号
     * @param param HospitalSpecialParam
     * @return 是否修改成功
     */
    public boolean updateSpecial(Long id, HospitalSpecialParam param) {
        HospitalSpecial special = hospitalSpecialMapper.selectByPrimaryKey(id);
        BeanUtils.copyProperties(param, special);
        special.setGmtModified(new Date());
        return hospitalSpecialMapper.updateByPrimaryKeySelective(special) > 0;
    }

    /**
     * 删除专科信息
     *
     * @param id 专科编号
     * @return 是否删除成功
     */
    public boolean deleteSpecial(Long id) {
        return hospitalSpecialMapper.deleteByPrimaryKey(id) > 0;
    }

    /**
     * 获取专科信息
     *
     * @param id 专科编号
     * @return 专科信息
     */
    public HospitalSpecial getSpecialDetails(Long id) {
        return hospitalSpecialMapper.selectByPrimaryKey(id);
    }

    /**
     * 获取专科列表
     *
     * @param name 专科名称（筛选条件）
     * @return 专科列表
     */
    public List<HospitalSpecial> getList(String name) {
        return hospitalSpecialMapper.selectListByName(name);
    }

    /**
     * 获取指定专科下的门诊列表
     *
     * @param specialId 专科编号
     * @return 指定专科下的门诊列表
     */
    public List<HospitalOutpatient> getOutPatientList(Long specialId) {
        return hospitalOutpatientService.getListBySpecialId(specialId);
    }
}
